package com.wei.czz.framework.blog.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wei.czz.common.dto.blog.BlogDto;
import com.wei.czz.common.po.blog.BlogManageListPo;
import com.wei.czz.common.po.blog.UserIssueBlogListPo;
import com.wei.czz.common.po.blog.audit.BlogAuditListPo;
import com.wei.czz.common.vo.blog.BlogManageFormVo;
import com.wei.czz.common.vo.blog.audit.BlogAuditFormVo;
import com.wei.czz.common.vo.blog.BlogFormVo;
import com.wei.czz.common.vo.blog.UserBlogFormVo;
import com.wei.czz.framework.blog.entity.BlogEntity;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:30:32
 * className: BlogDao 博客基本信息操作请求数据库交互接口
 * version: 1.0
 * description:
 */
public interface BlogDao extends BaseMapper<BlogEntity> {

    /**
     * 获取系统所有博客的博客id
     * @return 博客id列表
     */
    List<String> getBlogIdList();

    /**
     * 分页查询博客列表
     * @param page       mp分页对象
     * @param blogIdList 博客id列表
     * @param blogFormVo 博客查询参数对象
     * @return 查询结果
     */
    Page<BlogDto> getCacheBlogList(Page<BlogDto> page, @Param("blogIdList") List<String> blogIdList,
                                   @Param("blogFormVo") BlogFormVo blogFormVo);

    /**
     * 分页查询用户已发布博客
     * @param page   mp分页对象
     * @param formVo 参数对象
     * @return 查询结果
     */
    Page<UserIssueBlogListPo> selectUserIssueBlogPageList(Page<UserIssueBlogListPo> page,
                                                          @Param("formVo") UserBlogFormVo formVo);

    /**
     * 分页查询博客审核记录
     * @param page   mp分页对象
     * @param formVo 参数对象
     * @return 查询结果
     */
    Page<BlogAuditListPo> selectAuditPageList(Page<BlogAuditListPo> page, @Param("formVo") BlogAuditFormVo formVo);


    /**
     * 分页查询博客管理列表
     * @param page   mp分页对象
     * @param formVo 参数对象
     * @return 查询结果
     */
    Page<BlogManageListPo> getManageBlogPageList(Page<BlogManageListPo> page, @Param("formVo") BlogManageFormVo formVo);

    /**
     * 根据博客id，修改博客的浏览数量
     * @param blogId       博客id
     * @param num          博客浏览量变化大小
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogViewNum(@Param("blogId") Long blogId, @Param("num") Integer num,
                             @Param("updateTime") Date updateTime, @Param("updateUserId") Long updateUserId);

    /**
     * 根据博客id，修改博客的点赞数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，点赞数加一。val为-1时，点赞数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogLikeNum(@Param("blogId") Long blogId, @Param("num") Integer num, @Param("updateTime") Date updateTime,
                          @Param("updateUserId") Long updateUserId);

    /**
     * 根据博客id，修改博客的被收藏数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，收藏数加一。val为-1时，收藏数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCollectNum(@Param("blogId") Long blogId, @Param("num") Integer num, @Param("updateTime") Date updateTime,
                             @Param("updateUserId") Long updateUserId);

    /**
     * 根据博客id，修改博客的被评论数量
     * @param blogId       博客id
     * @param num          变化值（val为1时，评论数加一。val为-1时，评论数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCommentNum(@Param("blogId") Long blogId, @Param("num") Integer num, @Param("updateTime") Date updateTime,
                             @Param("updateUserId") Long updateUserId);

}
